﻿using Location.API.Model;
using Location.API.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Location.API.Infrastructure.Services
{
    public interface ILocationsService
    {
        /// <summary>
        /// 获取位置
        /// </summary>
        /// <param name="locationId"></param>
        /// <returns></returns>
        Task<Locations> GetLocationsAsync(string locationId);
        /// <summary>
        /// 获取所有位置
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<Locations>> GetLocationListAsync();
        /// <summary>
        /// 新增位置
        /// </summary>
        /// <param name="Location"></param>
        /// <returns></returns>
        Task AddLocationsAsync(Locations Location);
        /// <summary>
        /// 更新位置
        /// </summary>
        /// <param name="Location"></param>
        /// <returns></returns>
        Task UpdateLocationsAsync(Locations Location);
        /// <summary>
        /// 获取用户位置
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<IEnumerable<UserLocation>> GetUserLocationByUserIdAsync(string userId);
        /// <summary>
        /// 获取用户位置
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<IEnumerable<UserLocationResponse>> GetUserLocationAsync(string userId);
        /// <summary>
        /// 新增用户位置
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task AddUserLocationAsync(string userId, Locations location);
        /// <summary>
        /// 更新用户位置
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task UpdateUserLocationAsync(string userId, Locations location);
        /// <summary>
        /// 获取小区位置
        /// </summary>
        /// <param name="residentialAreasId"></param>
        /// <returns></returns>
        Task<ResidentialAreasLocation> GetResidentialAreasLocationByAreasIdAsync(string residentialAreasId);
        /// <summary>
        /// 获取小区位置
        /// </summary>
        /// <param name="residentialAreasId">小区Id</param>
        /// <returns></returns>
        Task<Locations> GetResidentialAreasLocationAsync(string residentialAreasId);
        /// <summary>
        /// 新增小区位置
        /// </summary>
        /// <param name="residentialAreasLocationId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task AddResidentialAreasLocationAsync(string residentialAreasLocationId, Locations location);
        /// <summary>
        /// 更新小区位置
        /// </summary>
        /// <param name="residentialAreasLocationId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task UpdateResidentialAreasLocationAsync(string residentialAreasLocationId, Locations location);
        /// <summary>
        /// 获取快递店位置
        /// </summary>
        /// <param name="expressStoreLocationId"></param>
        /// <returns></returns>
        Task<ExpressStoreLocation> GetExpressStoreLocationByStoreIdAsync(string expressStoreLocationId);
        /// <summary>
        /// 获取快递店位置
        /// </summary>
        /// <param name="residentialAreasId">小区Id</param>
        /// <returns></returns>
        Task<Locations> GetExpressStoreLocationAsync(string expressStoreLocationId);
        /// <summary>
        /// 新增快递店位置
        /// </summary>
        /// <param name="expressStoreId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task AddExpressStoreLocationAsync(string expressStoreId, Locations location);
        /// <summary>
        /// 更新快递店位置
        /// </summary>
        /// <param name="expressStoreId"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        Task UpdateExpressStoreLocationAsync(string expressStoreId, Locations location);
    }
}
